xwiki 文档迁移到 confluence-(3) 遇到的坑及注意事项

本文总结了 xwiki 文档迁移到 confluence 时遇到的坑以及要注意的一些情况.

不靠谱的 xwiki restful api

wiki 提供了一套 rest api, 可以用来对 wiki 文档进行一系列的操作.在这里主要用到了访问 wiki 文档信息、访问该文档的子文档新等 api.

一开始并没有发现问题, 因为觉得可以用来访问到文档信息即可.但是在后来的测试过程中遇到了几个问题:

  • 获取的子文档不全
  • 获取到了子文档的子文档
  • 获取了当前的文档
  • 获取到了平级的文档

对于以上的几个问题就不得不吐槽下了, 实在让人很糟心.既然上面 restful api 不好用, 那我们该怎么获取子文档呢?

转念一想, 既然 xwiki 页面上能够正常获取到文档, 而且导航菜单是很经典的树形菜单.一般树形菜单都是通过 ajax 请求获取到 json 格式的数据, 然后在前台展示.那就看看 xwiki 是不是也是这样的?

1

果然有几个 ajax 请求, 返回的是 json 格式的数据.单独打开每个链接发现果然如之前所想的一样.

从这个链接中我们得到了可以获得到子文档的请求:

1
2
3
# {0} 部分是类似 path1/path2 的路径
# {1} 部分是类似 path.path2 的路径
/xwiki/bin/get/{0}/WebHome?outputSyntax=plain&sheet=XWiki.DocumentTree&root=document:xwiki:{1}.WebHome&data=children&id=%23

访问某个文档的请求:

1
/xwiki/bin/get/{0}/WebHome?outputSyntax=plain&sheet=XWiki.DocumentTree&showAttachments=false&showTranslations=false&root=document:xwiki:{1}.WebHome&showRoot=true&data=children&id=%23

xwiki 路径与标题不匹配问题

这样情况产生的原因是创建文档的时候两次的标题不一致导致的.比如以下的情况就导致了路径和标题不一样.

2

对于要在 confluence 中创建同名的文档来说, 需要处理好这种问题, 组好是取标题的名称而不是路径的名称.

xwiki 获取子文档需要处理分页的情况

在某个文档下面有多个子文档的情况下, 如果子文档的数量较多, 那么可能会产生类似于分页的情况.也就是说某个文档的子文档下面会出现如下的情况:

3

这个时候就需要我们能够处理好这种情况, 查看返回的数据, 可以发现最后一条记录和其他的记录是不一样的.

4

xwiki 获取文档信息与从父文档获取的该文档信息可能不一致

这样情况是比如有一个文档名称为 test, 其父目录为 DBA, 那么从获取文档的接口获取 test 信息和从 DBA 获取其子文档新得到的 test 文档信息, 两者的信息有可能不一致.

5

所以从上面的几种情况中可以得到一个比较完整的没什么问题的获取子文档的接口:

1
2
3
4
5
# {0} 部分是类似 path1/path2 的路径
# {1} 部分是类似 path.path2 的路径
# {2} 部分是 offset 的值, 第一次查询传 0, 后面查询的时候根据上一次查询的结果传递此值
# showAttachments=false 可以不把附件作为子文档对待
/xwiki/bin/get/{0}/WebHome?outputSyntax=plain&sheet=XWiki.DocumentTree&showAttachments=false&showTranslations=false&exclusions=document:xwiki:Sandbox.WebHome&exclusions=document:xwiki:Help.WebHome&exclusions=document:xwiki:Menu.WebHome&exclusions=document:xwiki:XWiki.WebHome&data=children&id=document:xwiki:{1}.WebHome&offset={2}
xwiki 文档迁移到 confluence-(4) Jackson 如何动态生成 key
xwiki 文档迁移到 confluence-(2) 如何将上传的 pdf 显示在 confluence 页面中